#! /usr/bin/env/pyrhon3
# coding:utf-8
'''
    功能：判断密码强弱
    作者：王楠
    版本：4.0
    日期：2020/02/29
    新增：1.0：判断密码强度
         2.0：增加设置密码限制
         3.0：将密码及其强度保存到文件中
         4.0: 文件读取
         5.0: 类的定义 封装
'''


class PasswordClass():
    '''
        密码类
    '''
    # 类的属性（java构造函数）
    def __init__(self, password):
        self.password = password
        self.strength_level = 0
    pass

    def check_number_exist(self):
        '''
            函数：判断是否含有数字,默认不含有
        '''
        number_exist = False
        for x in self.password:
            if x.isnumeric():
                number_exist = True
                break
        return number_exist

    def check_letter_exist(self):
        '''
            函数：判断是否含有字母，默认不含有
        '''
        letter_exist = False
        for x in self.password:
            if x.isalpha():
                letter_exist = True
                break
        return letter_exist

    def check_strength_level(self):
        '''
            函数：判断密码强度水平，并返回
        '''
        if len(self.password) >= 8:
            self.strength_level += 1
        else:
            print('密码强度小于8')
        if self.check_number_exist():
            self.strength_level += 1
        else:
            print('密码要求包含数字')
        if self.check_letter_exist():
            self.strength_level += 1
        else:
            print('密码要求包含字母')
        return self.strength_level


def pwd_strength_main():
    # 密码强度

    pwd_str = input('请输入密码：')
    count = 1
    while count <= 3:
        p = PasswordClass(pwd_str)
        strength_level = p.check_strength_level()

        print('密码强度水平：', strength_level)
        if strength_level == 3:
            print('密码强度合格')
            break
        else:
            print('密码强度不合格，请再次设置')
            pwd_str = input('请输入密码：')
            count += 1
    if count > 3:
        print('密码设置超过次数')
        is_quit = input('是否重新设置[y/n]:')
        if is_quit == 'y':
            pwd_strength_main()


if __name__ == '__main__':
    pwd_strength_main()
